package br.unirio.octopus.dados;

import java.util.List;

import javax.persistence.Query;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import br.unirio.octopus.dominio.GrupoUsuarios;
import br.unirio.octopus.dominio.Usuario;

@Repository
public class RepositorioDeGrupoUsuarios extends
		RepositorioGenerico<GrupoUsuarios, Integer> {

	public RepositorioDeGrupoUsuarios() {
		super(GrupoUsuarios.class);

	}

	public GrupoUsuarios obterGrupoPorNome(String nome) {
		Query query = getGerenciadorDeEntidade().createQuery(
				"FROM GrupoUsuarios where nome = :nome ");
		query.setParameter("nome", nome);

		List<GrupoUsuarios> grupoUsuarios = (List<GrupoUsuarios>) query
				.getResultList();

		if (grupoUsuarios.isEmpty())
			return null;
		else
			return grupoUsuarios.get(0);
	}

	public GrupoUsuarios obterGrupoPorNomeESeusMembros(String nome) {

		Query query = getGerenciadorDeEntidade().createQuery(
				"FROM GrupoUsuarios as gru LEFT JOIN FETCH gru.membrosDoGrupo as usuario where gru.nome = :nome ");
		query.setParameter("nome", nome);

		List<GrupoUsuarios> grupo = (List<GrupoUsuarios>) query.getResultList();

		if (grupo.isEmpty())
			return null;
		else
			return grupo.get(0);
	}
	
	public List<Usuario> obterUsuariosClassificadosNoGrupo(String nome){
		TypedQuery<Usuario> query = this
				.getGerenciadorDeEntidade()
				.createQuery(
						"SELECT usu FROM Usuario usu LEFT JOIN FETCH usu.gruposDoUsuario as grupo where grupo.nome = :nome  ORDER BY usu.pontos DESC ",
						Usuario.class);
		query.setParameter("nome", nome);

		List<Usuario> usuarios = query.getResultList();
		
		

		if (usuarios.isEmpty())
			return null;
		else
			return usuarios;
	}

}
